Add & use GTK_CSS_AFFECTS_TRANSFORM
authorTimm Bäder <mail@baedert.org>
Wed, 23 Jan 2019 16:42:03 +0000 (17:42 +0100)
committerBenjamin Otte <otte@redhat.com>
Thu, 21 Feb 2019 18:47:28 +0000 (19:47 +0100)
This avoids invalidating the size of all widgets when updating CSS
transforms.

In theory, we don't even have to allocate the widget itself, because we
didn't change its size. But we have no way to track that.

gtk/gtkcssstylepropertyimpl.c
gtk/gtkcsstypesprivate.h
gtk/gtkwidget.c

index 62ddce3cd0f9918aac2c4c7e0cab672f1020ee52..62c48c39a0d37181347bae4ef7a7945277d91784 100644 (file)
@@ -1623,7 +1623,7 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_TRANSFORM,
                                           G_TYPE_NONE,
                                           GTK_STYLE_PROPERTY_ANIMATED,
-                                          GTK_CSS_AFFECTS_SIZE,
+                                          GTK_CSS_AFFECTS_TRANSFORM,
                                           transform_value_parse,
                                           NULL,
                                           _gtk_css_transform_value_new_none ());
index e305fdfb9d6b865f9d3294dea0228415c5e859d3..6d5401b7de44ca6b624da8c6137eb149d03b2d45 100644 (file)
@@ -115,6 +115,7 @@ typedef guint64 GtkCssChange;
  * @GTK_CSS_AFFECTS_POSTEFFECT: An effect is applied after drawing that changes
  * @GTK_CSS_AFFECTS_TEXT: Affects anything related to text rendering.
  * @GTK_CSS_AFFECTS_REDRAW: Affects anything that requires redraw.
+ * @GTK_CSS_AFFECTS_TRANSFORM: Affects the element transformation.
  *
  * The generic effects that a CSS property can have. If a value is
  * set, then the property will have an influence on that feature.
@@ -133,7 +134,8 @@ typedef enum {
   GTK_CSS_AFFECTS_SYMBOLIC_ICON = (1 << 8),
   GTK_CSS_AFFECTS_OUTLINE       = (1 << 9),
   GTK_CSS_AFFECTS_SIZE          = (1 << 10),
-  GTK_CSS_AFFECTS_POSTEFFECT    = (1 << 11)
+  GTK_CSS_AFFECTS_POSTEFFECT    = (1 << 11),
+  GTK_CSS_AFFECTS_TRANSFORM     = (1 << 12),
 } GtkCssAffects;
 
 #define GTK_CSS_AFFECTS_REDRAW (GTK_CSS_AFFECTS_CONTENT |       \
index 33bfcb52cf81f3a57a99e36b304f7246a675d177..edade0538edebe166f390a9313250c6523746421 100644 (file)
@@ -5522,6 +5522,10 @@ gtk_widget_real_style_updated (GtkWidget *widget)
             {
               gtk_widget_queue_resize (widget);
             }
+          else if (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TRANSFORM))
+            {
+                gtk_widget_queue_allocate (widget);
+            }
           else if (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_REDRAW) ||
                    (has_text && gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TEXT_CONTENT)))
             {